package xrate

import (
	"math/rand"
	"time"
)

type RateWain struct {
	ID         uint    // 预留ID，用于中奖后的奖品识别
	Name       string  // 奖品名称
	Rate       float64 // 中奖率【因浮点数无法直接进行概率计算，所以此处使用%%%的形式，即最小支持0.000001，且因为需要经过乘数处理，此值不能超过10000】
	StartId    uint    // 星级ID
	StartCount uint    // 星级保底数量
	ratmin     int64   // 中奖最小值（含）
	ratmax     int64   // 中奖最大值（不含）
}

// 抽奖函数
//
//	p	待抽奖的对象信息
func RateWinning(p []RateWain) int {
	total := int64(0)
	for i := 0; i < len(p); i++ {
		if p[i].Rate > 10000 {
			return -1
		}
		p[i].ratmin = total
		p[i].ratmax = total + int64(p[i].Rate*1000000)
		total += int64(p[i].Rate * 1000000)
	}
	// 进行抽奖
	// 获取0~total的随机数
	r := rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(total)
	for i := 0; i < len(p); i++ {
		if r >= p[i].ratmin && r < p[i].ratmax {
			return i
		}
	}
	return -1
}
